/**
 * $Id: TestMain.java,v 1.0 2022/6/6 22:49 shidesheng Exp $
 * <p>
 * Copyright 2021 Sinosoft Co.,Ltd. All rights reserved.
 */
package sds.mode.builder.chain;


/**
 * @author shidesheng
 * @version $Id: TestMain.java,v 1.1 2022/6/6 22:49 shidesheng Exp $
 * Created on 2022/6/6 22:49
 *
 * 建造者模式  --> 链式编程
 * 定义：
 * 建造者模式是指将一个复杂过程的构建与它的表示分离，使得同样的构建过程可以创建不同的表示
 * 特征：
 * 用户只需指定需要建造的类型就可以获得对象，建造过程及细节不需要了解。
 * 在源码中的应用：
 * StringBuilder  CacheBuilder   SqlSessionFactoryBuilder  BeanDefinitionBuilder
 * 优点：
 * 1. 封装性好，创建和使用分离
 * 2. 扩展性好，建造类之间独立，一定层度上解耦
 * 缺点：
 * 产生多余的Builder对象
 * 产品内部发生变化，建造者都要修改，成本较大，不符合开闭原则
 *
 * 工厂模式和建造者模式的区别：
 * 1. 建造者模式更加注重方法的调用顺序，工厂模式注重于创建对象
 * 2. 创建对象的力度不同，建造者模式创建复杂的对象，由各种复杂的部件组成，工厂模式创建出来的都一样
 * 3. 关注点不一样：工厂模式只需要将对象创建出来就可以了，而建造者模式不仅要创建对象，还要知道这个对象由哪些部件组成。
 * 4. 建造者模式根据建造过程的顺序不一样，最终的对象部件组成也不一样
 */
public class TestMain {

	public static void main(String[] args) {
		CourseBuilder builder = new CourseBuilder();
		builder.addName("java")
		.addPPT("ppt课件")
		.addNote("笔记");
		System.out.println(builder.builder());
	}

}
